package frsf.cidisi.exercise.tp2.situationCalculus.actions;

import frsf.cidisi.exercise.tp2.situationCalculus.actions.ConectorLog;
import frsf.cidisi.exercise.tp2.situationCalculus.EstadoActualArqueologo;
import frsf.cidisi.exercise.tp2.situationCalculus.EstadoActualIsla;
import frsf.cidisi.faia.agent.situationcalculus.SituationCalculusAction;
import frsf.cidisi.faia.state.AgentState;
import frsf.cidisi.faia.state.EnvironmentState;

public class TomarTesoro extends SituationCalculusAction {

	private ConectorLog log = new ConectorLog();
	private int cantidadDeTesoros;
	private int cantidadAldeas;
	private String[] nombreAldeas = {"Aragaey","Ase","Bresol","Bulouve","Cabe","Cenede","Ergintone","Icaedur","Mixocu","Peregaey","Vinizaile"};
		
    @Override
    public EnvironmentState execute(AgentState ast, EnvironmentState est) {
           
    	EstadoActualIsla environmentState = (EstadoActualIsla) est;
        EstadoActualArqueologo agState = (EstadoActualArqueologo) ast;
            
  //    if(metodosUtiles.SePuedeCargar(tesoroActual,metodosUtiles.calcularPeso(agState.getTesorosAcoplado()),pesoMaximoAcoplado)){
        	        	
        int posicionAgente = environmentState.getposicionAgente();
        double auxTesorosAcoplado = 0;
        double auxPesoTesoroAcoplado = 0;
        double auxTesorosAldea = 0;
        double auxPesoTesoroAldea = 0;
        
        double tesoroActual =  ((EstadoActualIsla) est).gettesoros()[posicionAgente-1][0];
        double pesoActual =  ((EstadoActualIsla) est).gettesoros()[posicionAgente-1][1];
        
        auxTesorosAcoplado =  agState.getTesoroAcoplado() + tesoroActual;
        auxPesoTesoroAcoplado = agState.getPesoAcopladoAgente() + pesoActual;
        
        agState.setTesoroAcoplado(auxTesorosAcoplado);
        agState.setPesoAcopladoAgente(auxPesoTesoroAcoplado);
        
        environmentState.setTesoroAldea(environmentState.getposicionAgente()-1, auxTesorosAldea,auxPesoTesoroAldea);
        	
       
       	ast = agState;
      	est = environmentState;
        	
        	
        //TODO: LOG Real Execute
        String mensaje = "Tome el tesoro de la aldea: "+ nombreAldeas[agState.getPosicionAgente()-1];
        System.out.println(mensaje);
        log.log(mensaje);
        	
              
        return est;
    }

    @Override
    public String toString() {
        return "tomarTesoro";
    }

	public void setLog(ConectorLog log) {
		this.log = log;
	}

	public ConectorLog getLog() {
		return log;
	}

	public void setCantidadDeTesoros(int cantidadDeTesoros) {
		this.cantidadDeTesoros = cantidadDeTesoros;
	}

	public int getCantidadDeTesoros() {
		return cantidadDeTesoros;
	}

	public void setCantidadAldeas(int cantidadAldeas) {
		this.cantidadAldeas = cantidadAldeas;
	}

	public int getCantidadAldeas() {
		return cantidadAldeas;
	}
	
	public void setNombreAldeas(String[] nombreAldeas) {
		this.nombreAldeas = nombreAldeas;
	}

	public String[] getNombreAldeas() {
		return nombreAldeas;
	}
}

